package _3singleton.type7;

public class SingletonTest07 {

	public static void main(String[] args) {
		System.out.println("使用静态内部类完成单例模式");
		Singleton instance = Singleton.getInstance();
		Singleton instance2 = Singleton.getInstance();
		System.out.println(instance == instance2); // true
		System.out.println("instance.hashCode=" + instance.hashCode());
		System.out.println("instance2.hashCode=" + instance2.hashCode());

	}

}
//第一个特点外部类被装载的时候，内部类不会被马上执行
//第二个特点 当内部内调用getInstance 装载的时候只会被调用一次，而且事线程安全的
// 静态内部类完成， 推荐使用，使用了jvm 底层类的装载机制
class Singleton {
	private static volatile Singleton instance;

	//构造器私有化
	private Singleton() {}

	//写一个静态内部类,该类中有一个静态属性 Singleton
	private static class SingletonInstance {
		private static final Singleton INSTANCE = new Singleton();
	}

	//提供一个静态的公有方法，直接返回SingletonInstance.INSTANCE

	public static synchronized Singleton getInstance() {

		return SingletonInstance.INSTANCE;
	}
}